import tkinter as tk
from tkinter import messagebox

# 有序数组
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 返回中位数
mid = array[len(array) // 2]

# 定义二叉树节点类
class TreeNode:
    def __init__(self, value):
        self.value = value
        self.left = None  # 左侧子节点
        self.right = None  # 右侧子节点

# 插入一个新节点
def add_node(node, num):
    # 如果节点值相等就停止插入
    if node.value == num:
        return
    if num < node.value:
        # 插入值小于当前节点
        if node.left is None:
            # 如果左侧子节点为空，就插入
            node.left = TreeNode(num)
        else:
            # 否则继续遍历左侧的子节点
            add_node(node.left, num)
    else:
        # 插入值大于当前节点
        if node.right is None:
            # 如果右侧子节点为空，就插入
            node.right = TreeNode(num)
        else:
            # 否则继续遍历右侧的子节点
            add_node(node.right, num)

# 查找节点
def search_node(node, num):
    if node is None:
        return None
    if node.value == num:
        return node
    # 否则开始迭代
    if num < node.value:
        # 如果小于节点就遍历左侧的子节点
        return search_node(node.left, num)
    else:
        # 否则就遍历右侧的子节点
        return search_node(node.right, num)

# 创建根节点
root_node = TreeNode(mid)

# 循环添加节点
for item in array:
    add_node(root_node, item)

# 创建主窗口
root = tk.Tk()
root.title("树形搜索")

# 创建标签和输入框
label = tk.Label(root, text="请输入要搜索的数字:")
label.pack(pady=10)

entry = tk.Entry(root)
entry.insert(0, 5)
entry.pack(pady=5)

# 搜索按钮点击事件处理函数
def search_button_click():
    try:
        num = int(entry.get())
        result = search_node(root_node, num)
        if result:
            messagebox.showinfo("搜索结果", f"已经找到 {num}")
        else:
            messagebox.showinfo("搜索结果", f"未找到 {num}")
    except ValueError:
        messagebox.showerror("输入错误", "请输入有效的整数")

# 创建搜索按钮
search_button = tk.Button(root, text="搜索", command=search_button_click)
search_button.pack(pady=20)

# 运行主循环
root.mainloop()